Переход от массивов стиля С к std::array представляет собой фундаментальный сдвиг в сторону безопасности типов и генерической программирования в современном C++.
1. Проблема потери указателя
Устаревшие массивы (int arr[N]) страдают от «потери указателя». При передаче функциям они теряют метаданные о размере и преобразуются в сырой указатель (int*). Это приводит к небезопасным операциям с указателями и переполнению буфера.
2. Современное развитие в C++11
std::array обеспечивает тонкий, обёртку без накладных расходов вокруг сырых массивов. Она интегрируется со стандартной библиотекой шаблонов (STL), при этом соблюдая правило пяти Правило пяти.
3. Идеальная передача с помощью std::forward
C++11 представил std::forward чтобы обеспечить std::array объекты перемещаются через обёртки шаблонов без лишних копий. Используя правила сворачивания ссылок, мы сохраняем категорию значения объекта (lvalue против rvalue).
$$T\&\& + \& \rightarrow T\&$$